// 发布者订阅者模式
class PubSub {
    constructor() {
        // 存放订阅者的对象
        // this.subs={msg:[callback],msg2:[callback2]}
        this.subs = {};
    }
    /**
     * 订阅方法
     * @param {*} key 订阅对象名称
     * @param {*} callback 回调函数   
     */
    subscribe(message, callback) {
        // 如果对象元素存在, 则为其创建一个空数组
        this.subs[message] = this.subs[message] ? this.subs[message] : [];
        this.subs[message].push(callback);
    }

    /**
     * 发布消息(通知订阅对象)
     * key: 订阅对象名称
     * data: 额外参数
     */
    publish(key, data) {
        if (this.subs[key]) {
            this.subs[key].forEach(callback => {
                // 执行订阅者的处理函数
                callback && callback(data);
            });
        }
    }
}

// 创建一个实例对象
const pubsub = new PubSub();